文献DeepTracker:Visualizing the Training Process of Convolutional Neural Networks解读Ⅰ

这篇文章能够进入到我的视线,缘由也是在听屈老师介绍他们组的工作,这篇文章出自国内香港科技大学屈华民老师组的一篇大作,此文章收录在期刊TIST(ACM Transactions on Intelligent Systems and Technology),在自己博士课题方向的刚开始,接触此领域关注的第一篇文章是CNNvis,出自清华大学刘世霞老师组。

摘要/动机

深度卷积网络已经在各个领域取得巨大成功。为了加速训练过程,并且减少试错次数,专家们首先需要理解在训练过程中发生的事情和理解卷积网络的行为,虽然目前有Tensorboard训练可视化平台,但是这个平台只能提供少量的信息,比如训练集/验证集的loss值等。为了跨越此鸿沟,作者提出了一个可视分析系统,DeepTracker,对训练过程的动态信息进行探索和发现隐藏在大量训练日志的异常模式。

引言

可视隐藏在动态训练过程中的信息对理解CNN网络至关重要(例如:损失值、正确率的变化;权重、梯度、激活值随时间的变化等),不幸地是CNNs网络通常不仅包含了许多相互制约与非线性部分,并且近来网络也变得越宽越深,这些都给专家在推断CNN训练行为带来了很多困难。

有很多研究工作关注于CNN网络学习到的特征,或者网络训练过程的某些代表性快照(snapshots)。不过,很少有研究关注可视训练的整个动态过程(正是本文献所要进行的工作),目前存在的一些工具,比如:TensorBoard、Nvidia Digist、Deeplearning4j不能够解决工业级别(industry-level)的训练(在非常大的训练集Imagenet上训练大型网络),作者也提到现有的这些工作不能说明以下一些问题:

  • 随着迭代次数的增加模型在每一个图像类别的性能变化如何?

  • 参数的变化是如何影响每一个类别的分类结果?

  • 如此多的层数和如此多的图像类别,哪些才更值得关注?

有了上述这些顾虑,亟需一种可扩展(scalable)的可视化解决方案。那么会面临哪些挑战呢?

  • 第一大挑战:处理大量(large-scale)的训练日志数据

    • 百万参数、上万张验证集、百万迭代次数,然而参数与分类结果需要几个迭代次数就得记录一次
  • 第二大挑战:日志信息是异构的

    • 结构信息(网络结构)、数值信息(神经元权重)、图像信息(验证数据集)、标定数据(分类结果)

面对这两大挑战,作者提出了如下解决方案:

后端算法:

  • 采用下采样方法存储、预处理、组织数据

  • 高效的索引机制保证实时(real-time)交互

  • 面向应用的异常检测方法

  • 集成过滤整合方法

前端可视化:

  • 立方体(cube-style)可视化形式揭示神经元权重、验证集数据、训练的迭代次数。从不同的角度进行slice、dice数据。
    文章的主要贡献点总结如下:

  • 系统化分析问题与需求

  • 系统化地后端算法与前端可视化方法

  • 一些新颖的可视化与交互技巧:hierarchical small multiples、grid-based correlation view、cube-style visualization.

    卷积网络背景知识


    卷积网络示意图

    典型的卷积网络通过一系列的级联层将输入的图像转换成1000维向量,完成图像的分类识别任务。构建一个卷积网络结构主要包括:卷积层、池化层、全连接层。网络的参数一般用高斯分布初始化,参数的优化通过梯度下降方法。

(注:验证集的作用只是用来验证训练过程是否有效,并不会再次更改网络训练后的权重)

相关工作

卷积网络可视化

关于CNNs可视化的相关工作,作者将其分为两个类别,以特征为主(feature-oriented)、以演变为主(evolution-oriented)。

  • 以特征为主的相关工作

heatmap的形式使得我们可以明确输入图像的哪些部分对分类结果贡献最大,合成图像方法可以使得我们明确针对特定图像的特征与相关神经元之间的关系,寻找使得特定神经元激活值最大的图像块方法使得我们能够明确特定神经元学习到的特定特征。虽然以上工作能够探索特定网络是怎么工作,但是并不能以一个全局的角度去全面审视整个网络的训练情况。

  • 网络的训练过程与演变

典型的方法就是挑选出训练过程中几个几个快照片段(snapshots)。这些方法的局限在于选择合适的训练片段进行比较与观察,而对于分析参数的变化过程,一般的都是利用降维方式映射到二维平面进行展现,但是,目前的这些方法受限于可扩展性,即不能拓展到有效分析大型数据集比如:Imagnet;

时间序列可视化

(注:时间序列可视化是第一次接触)
两种经典的时间序列可视化方法:

  • 一个图空间放置多个线图(place multiple charts in the same graph space to produce overlapping curves)

  • small multiples方法

需求分析

基于卷积网络训练过程中普遍存在的问题与现象,与3位专家周期探讨与商量,最后该系统确定了6种亟需解决的需求。

  • 普遍存在问题与现象

    超参数(学习率、批次大小、层的数量、每层滤波器数量、权重衰减、动量等)

    训练过程中监测变化情况:loss函数值、训练/验证集错误率、权重更新速率、每一层权重、梯度、激活值分布情况。

    经验告诉我们:随着迭代次数的增加loss值与错误率应该减少,这两者值同时增加或者
    训练集上面的loss值violent fluctuation则暗示了可能存在问题,验证集与训练集错误率明显存在巨大反差,表明可能出现过拟合现象,同时表明网络模型学习能力有限。权重更新速率期望在10-3附近,权重初始化分布应该遵循高斯分布,训练过程中如果出现梯度爆炸或者消失现象都将是一种不好的信号。激活值的分布随着训练过程高层相对于低层越来越稀疏。

这些经验虽然能够从一定程度去指导网络的调试与优化,但是并不能有针对性解决具体训练过程中出现的特定问题,比如训练过程中模型对于不同类别的性能表现情况等

  • 6种需求

    • R1 神经元权重信息的多面含义

    • R2 不同层的比较

    • R3 跟踪验证集的分类结果

    • R4 检测出重要的迭代阶段

    • R5 不同验证集类别的表现情况

    • R6 相关性探讨

系统概览

系统概览图

DeepTracker是一个基于MEAN.js全栈框架的web应用。后端作者对训练日志进行了层级化组织,制定了特定应用的索引机制进行数据的高效存储便于实时在线分析。对于前端可视化界面,建立了三种协同视图分析,即 Validation view、layer view、correlation view。

数据收集与分析

此系统最原始的动机是监控“工业级别”的卷积网络训练过程,所以作者采用的卷积模型是ResNet,使用的数据集ImageNet数据集。面对如此大的一个模型大约需要120个epoch才能达到收敛(batch size=128;iterations=120万次;information volumn = several petabytes;times = 4weeks),作者最终通过与专家商量讨论将信息量控制在ITB之内(采取的措施是:每个epoch内只提取7次迭代变化情况)。

作者只记录了两种信息类型:卷积层/全连接层神经元的梯度与权重、图像分类结果信息。

BatchNormalization层的参数信息作者没有去关注,并且也没有关注每一层的激活值形况,并不是说明这两者信息对于网络训练过程不重要,只是不再本文献的讨论范围之内。

虽然基于前面的考虑,对数据规模进行了缩小,但是仍然存在数据量大的问题,作者应对的措施是建立数据索引机制。包括:

  • 层统计索引:检索每一次迭代任意一层的统计值(均值、方差)

  • 层滤波器索引:列出每一次迭代任意一层的滤波器信息

  • 迭代滤波索引:搜索任意一次迭代过程中所有层中改变最大的滤波器

  • 类别统计索引:抽取所有迭代过程中每一类别的信息

  • 类别图像索引:特定类别的特定图像数据信息

可视化分析

1. Validation View

R3需求

再进行可视化的设计的时候,需要说明一个很重要的概念就是:可视化代表的含义即可视编码(Visual Encoding)
为了解决需求R3,所有类别图像随着网络迭代的变化总情况。作者设计了如下的可视界面

分类不同类别图像的难易程度

横轴x: 表示网络训练过程的整个迭代次数,并且用红->绿的颜色渐变表示错误率情况

纵轴y: 依据不同类别图像的分类趋势变化情况,利用k-mean聚类算法,将1000种类其分为4个簇,每个簇下方的每次迭代错误率是所有簇类的平均值,采用heatmap这种可视形式展现(一种有效的时间序列可视化方法)

R5需求

针对具体某一簇的所有类别图像的分类情况。

R4异常迭代的发现

作者提出了一种检测异常迭代的算法,并且用倒三角与正三角的可视编码形式表示异常与正常情况。

异常检测

此异常算法提出的动机来源于:对于一个动态的分类过程,正常的模式应该是假如把某张图像分类正确之后,应该再不会将此分错,而异常的情况在于某些图片分类情况在分类的过程中一直不确定。

2. Layer View

R1需求、R2需求

对于这部分的任务设计,作者将网络的结构与层内的统计信息等放置在一起,主要表现的是神经元权重的统计信息。

3. Correlation View

这一部分主要考虑滤波器与图像之间的模式,对于某些类别的图像可能检测出数个异常迭代情况,针对每个异常迭代伴随着异常滤波器。那么是否在这多个异常迭代中有着相同的滤波器?

R6需求

进一步探究网络的参数是如何影响分类结果。

异常层与异常类别之间的异常滤波器个数展示情况

如上图所示:纵轴表示在训练过程中出现异常迭代的所有异常层个数,横轴表示所有的异常类别,不同方块颜色深度表示异常滤波器的个数。显然这只是一个抽象的表示。

4. Cube Visualization

主视角:层级别的角度展示;俯视角:验证数据集角度展示;右视角:相关性分析角度展示

后记

本文章只是对“DeepTracker:Visualizing the Training Process of Convolutional Neural Networks”文献的简单转述与理解,后续将继续对此文献进行深入挖掘与分析。

Reference:

  1. 原文作者:刘冬煜